package GUI;

import java.awt.BorderLayout;

import java.awt.EventQueue;

import javax.print.attribute.standard.JobHoldUntil;
import javax.swing.DefaultListModel;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;
import javax.swing.JTextField;
import javax.swing.JLabel;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import java.awt.Dimension;
import javax.swing.JButton;

import Tools.Tools;



import DAO.PazienteDAO;
import Entita.Categoria;
import Entita.Paziente;


import java.awt.Font;
import java.awt.Dialog.ModalExclusionType;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Locale;
public class Anamnesi extends JFrame {
	
	
	/**
	 * 
	 */
	private Anamnesi self;
	final JDialog dlg = new JDialog(this, "Caricamento", true);
	private static final long serialVersionUID = 1L;
	protected Paziente iPaziente;
	private JFrame anamnesiFrame;
	private JPanel contentPane;
	private JTextField iTitolo;
	private JTextField iNome;
	private JTextField iCognome;
	private JTextField iSesso;
	private JTextField iLuogoNascita;
	private JTextField iEta;
	private JTextField iTitoloStudio;
	private JTextField iDataNascita;
	private JTextField iProfessione;
	private JTextField iTelefono;
	private JTextField iEmail;	
	private JTextField iLuogoEsame;
	private JTextField iDataEsame;
	private JTextField iMetodo;
	private JTextField iEsaminatore;
	private JTextField iInviante;
	private JTextField iContesto;
	private JTextField iAtteggiamento;
	protected JTextField iTempoRaccolta;
	protected JTextField iTempoTotale;
	private JTextField iAltriTest;
	private JTextField iLuce;
	private JTextField iTavole;
	private JTextField iAltriCasi;
	private JTextArea iAnamnesi;
	private JList<Categoria> listBoxAssociate;
	private JList<Categoria> listBoxDissociate;
	private KeyListener limitaCaratteri= new KeyListener() {
		
		@Override
		public void keyTyped(KeyEvent e) {
			JTextField textField=(JTextField)e.getComponent();
			if(textField.getText().length()>=textField.getColumns()*1.5&&(e.getKeyChar()!='\b')){
				e.consume();
				
			}
			
		}
		
		@Override
		public void keyReleased(KeyEvent e) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void keyPressed(KeyEvent e) {
		}
	};

	
	private FocusListener focusLostSave=new FocusListener() {
		
		@Override
		public void focusLost(FocusEvent e) {
			iPaziente.setTitolo(iTitolo.getText());
			iPaziente.setNome(iNome.getText());
			iPaziente.setCognome(iCognome.getText());
			iPaziente.setLuogoNascita(iLuogoNascita.getText());
			if (iDataNascita.getText().length()>0){
				try {
					iPaziente.setDataNascita(new java.sql.Date(new SimpleDateFormat("dd/MM/yyyy").parse(iDataNascita.getText()).getTime()));
				} catch (Exception e1) {
					iDataNascita.setText("");
					JOptionPane.showMessageDialog(null,"Inserire una data nel formato gg/mm/aaaa","Errore",JOptionPane.ERROR_MESSAGE);
				}
			}else{
				iPaziente.setDataNascita(null);
			}
			iPaziente.setSesso(iSesso.getText().toUpperCase());
			if (iEta.getText().length()>0){
				try{
					iPaziente.setEta(Integer.parseInt(iEta.getText()));
				}catch(Exception e1){
					iEta.setText("");
					JOptionPane.showMessageDialog(null,"Inserire un numero","Errore",JOptionPane.ERROR_MESSAGE);
					
				}				
			}
			iPaziente.setTitoloStudio(iTitoloStudio.getText());
			iPaziente.setProfessione(iProfessione.getText());
			iPaziente.setIndirizzoVia(iIndirizzoVia.getText());
			iPaziente.setIndirizzoCAP(iIndirizzoCAP.getText());
			iPaziente.setIndirizzoCitta(iCitta.getText());
			iPaziente.setIndirizzoStato(iStato.getText());
			iPaziente.setNumeroTelefono(iTelefono.getText());
			iPaziente.setEmail(iEmail.getText());
			if (iDataEsame.getText().length()>0){
				try {
					iPaziente.setDataEsame(new java.sql.Date(new SimpleDateFormat("dd/MM/yyyy").parse(iDataEsame.getText()).getTime()));
				} catch (Exception e1) {
					iDataEsame.setText("");
					JOptionPane.showMessageDialog(null,"Inserire una data nel formato gg/mm/aaaa","Errore",JOptionPane.ERROR_MESSAGE);
				}
			}else{
				iPaziente.setDataEsame(null);
			}
			iPaziente.setLuogoEsame(iLuogoEsame.getText());
			iPaziente.setEsaminatore(iEsaminatore.getText());
			iPaziente.setInviante(iInviante.getText());
			iPaziente.setContesto(iContesto.getText());
			iPaziente.setAtteggiamento(iAtteggiamento.getText());
			iPaziente.setTempoRaccolta(iTempoRaccolta.getText());
			iPaziente.setTempoTotale(iTempoTotale.getText());
			iPaziente.setMetodo(iMetodo.getText());
			iPaziente.setAltriTest(iAltriTest.getText());
			iPaziente.setLuce(iLuce.getText());
			iPaziente.setSerieTavole(iTavole.getText());
			iPaziente.setAltriCasi(iAltriCasi.getText());
			iPaziente.setIntegrazione(iAnamnesi.getText());
			
			pazienteDAO.update(iPaziente);
		}
		
		@Override
		public void focusGained(FocusEvent e) {
			// TODO Auto-generated method stub
			
		}
	};
	
	private PazienteDAO pazienteDAO=new PazienteDAO();
	private KeyListener limitaSesso= new KeyListener() {
		
		@Override
		public void keyTyped(KeyEvent e) {
			JTextField textField=(JTextField)e.getComponent();
			if(textField.getText().length()>=1||(e.getKeyChar()!='F'&&e.getKeyChar()!='f'&&e.getKeyChar()!='M'&&e.getKeyChar()!='m')){
				e.consume();
			}
			
		}
		
		@Override
		public void keyReleased(KeyEvent e) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void keyPressed(KeyEvent e) {
		}
	};

	
	private JTextField iIndirizzoVia;
	private JTextField iIndirizzoCAP;
	private JTextField iCitta;
	private JTextField iProvincia;
	private JTextField iStato;
	
	private Archivio callerArchivio;
	protected Inserimento iInserimento;
	protected Main main;


	public boolean salva(){
		return true;
	}

	
	public Anamnesi(Paziente paziente, Archivio caller) throws Exception {
		callerArchivio=caller;
		self=this;
		iPaziente=paziente;//new PazienteDAO().findByPrimaryKey(paziente.getID());;
		anamnesiFrame=this;
		setIconImage(Tools.createImage("Icons/Logo.png"));
		this.setModalExclusionType(ModalExclusionType.APPLICATION_EXCLUDE);
		
		this.addWindowListener(new WindowListener() {
			
			@Override
			public void windowOpened(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void windowIconified(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void windowDeiconified(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void windowDeactivated(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void windowClosing(WindowEvent e) {
//			    WaiterDialog.show(callerArchivio);
//				iInserimento.frame.setVisible(false);
				if (iInserimento.formDiagnosi!=null){
					iInserimento.formDiagnosi.dispose();
				}
				iInserimento.frame.dispose();
				callerArchivio.refresh();
				callerArchivio.setOpen(false);
//				WaiterDialog.stop();
			}
			
			@Override
			public void windowClosed(WindowEvent e) {
				
			}
			
			@Override
			public void windowActivated(WindowEvent e) {
				// TODO Auto-generated method stub
				
			}
		});
		setMinimumSize(new Dimension(300, 200));
		setPreferredSize(new Dimension(1000, 400));
		setTitle("Anamnesi");
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		setBounds(100, 100, 1000, 600);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		contentPane.setLayout(new BorderLayout(0, 0));
		setContentPane(contentPane);
//		this.addWindowStateListener(new WindowStateListener() {
//			
//			@Override
//			public void windowStateChanged(WindowEvent arg0) {
//				// TODO Auto-generated method stub
//				
//			}
//		})
		
		
		
		
		JTabbedPane tab=new JTabbedPane();
		
		JPanel panelAnagrafica = new JPanel();
		JPanel panelCondizioniSomministrazione = new JPanel();
		JPanel panelIntegrazioneAnamnesi = new JPanel();
		JPanel panelCategorie = new JPanel();
		
		tab.setFont(new Font("Book Antiqua", Font.PLAIN, 20));
		tab.addTab("Anagrafica", panelAnagrafica);
		tab.addTab("Condizioni di somministrazione", panelCondizioniSomministrazione);
		tab.addTab("Integrazione Anamnesi", panelIntegrazioneAnamnesi);
		tab.addTab("Associa Cartelle", panelCategorie);

		contentPane.add(tab, BorderLayout.CENTER);
		//contentPane.add(new JButton("Ciao"), BorderLayout.SOUTH);

		JLabel voidField=new JLabel("                                                                                                                                  ");
		voidField.setPreferredSize(new Dimension(400,40));
		panelAnagrafica.add(voidField);
	
		JPanel panel_titolo = new JPanel();
		
		JLabel txtpnTitolo = new JLabel();
		txtpnTitolo.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		panel_titolo.add(txtpnTitolo);
		txtpnTitolo.setBackground(new Color(255, 255, 255));
		txtpnTitolo.setOpaque(false);
		txtpnTitolo.setText("Titolo");
		
		iTitolo = new JTextField();
		iTitolo.addKeyListener(limitaCaratteri);
		iTitolo.setMargin(new Insets(0, 5, 0, 0));
		iTitolo.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		panel_titolo.add(iTitolo);
		iTitolo.setColumns(35);
		iTitolo.setText(paziente.getTitolo());
		iTitolo.addFocusListener(focusLostSave);
		panelAnagrafica.add(panel_titolo);
		
		
		JPanel panel_1 = new JPanel();
		panelAnagrafica.add(panel_1);
		JLabel txtpnNome = new JLabel();
		txtpnNome.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		panel_1.add(txtpnNome);
		txtpnNome.setBackground(new Color(255, 255, 255));
		txtpnNome.setOpaque(false);
		txtpnNome.setText("Nome");
		
		iNome = new JTextField();
		iNome.addKeyListener(limitaCaratteri);
		iNome.setMargin(new Insets(0, 5, 0, 0));
		iNome.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		panel_1.add(iNome);
		iNome.addFocusListener(focusLostSave);
		iNome.setText(paziente.getNome());
		iNome.setColumns(19);
		
		JPanel panel_2 = new JPanel();
		panelAnagrafica.add(panel_2);
		
		JLabel txtpnCognome = new JLabel();
		txtpnCognome.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		txtpnCognome.setOpaque(false);
		panel_2.add(txtpnCognome);
		txtpnCognome.setText("Cognome");
		
		iCognome = new JTextField();
		iCognome.addKeyListener(limitaCaratteri);
		iCognome.setMargin(new Insets(0, 5, 0, 0));
		iCognome.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		panel_2.add(iCognome);
		iCognome.setColumns(19);
		iCognome.setText(paziente.getCognome());
		iCognome.addFocusListener(focusLostSave);
		JPanel panel_4 = new JPanel();
		panelAnagrafica.add(panel_4);
		
		JLabel txtpnLuogoEData = new JLabel();
		txtpnLuogoEData.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		txtpnLuogoEData.setOpaque(false);
		txtpnLuogoEData.setText("Luogo di nascita");
		panel_4.add(txtpnLuogoEData);
		
		iLuogoNascita = new JTextField();
		iLuogoNascita.addKeyListener(limitaCaratteri);
		iLuogoNascita.setMargin(new Insets(0, 5, 0, 0));
		iLuogoNascita.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		iLuogoNascita.setText(paziente.getLuogoNascita());
		iLuogoNascita.setColumns(17);
		iLuogoNascita.addFocusListener(focusLostSave);
		panel_4.add(iLuogoNascita);
		
		JPanel panel_7 = new JPanel();
		panelAnagrafica.add(panel_7);
		
		JLabel txtpnData = new JLabel();
		txtpnData.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		txtpnData.setOpaque(false);
		txtpnData.setText("Data");
		panel_7.add(txtpnData);

		iEta = new JTextField();
		iEta.addFocusListener(focusLostSave);

		iDataNascita = new JTextField();
		iDataNascita.addKeyListener(limitaCaratteri);
		iDataNascita.setMargin(new Insets(0, 5, 0, 0));
		iDataNascita.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		iDataNascita.setColumns(10);
		iDataNascita.addFocusListener(focusLostSave);
		if (paziente.getDataNascita()!=null){
			iDataNascita.setText(new SimpleDateFormat("dd/MM/yyyy",new Locale("IT")).format(paziente.getDataNascita()));
			CalcolaEta();
		}
		iDataNascita.addFocusListener(new FocusListener() {
			
			@Override
			public void focusLost(FocusEvent arg0) {
					CalcolaEta();
			}
			
			@Override
			public void focusGained(FocusEvent arg0) {
				salva();
				
			}
		});
		
		panel_7.add(iDataNascita);
		
		JPanel panel_3 = new JPanel();
		panelAnagrafica.add(panel_3);
		
		JLabel txtpnSesso = new JLabel();
		txtpnSesso.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		txtpnSesso.setOpaque(false);
		txtpnSesso.setText("Sesso");
		panel_3.add(txtpnSesso);
		
		iSesso = new JTextField();
		iSesso.addKeyListener(limitaSesso);
		iSesso.setMargin(new Insets(0, 5, 0, 0));
		iSesso.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		iSesso.setColumns(2);
		iSesso.addFocusListener(focusLostSave);
		iSesso.setText(paziente.getSesso());
		panel_3.add(iSesso);
		
		JPanel panel_5 = new JPanel();
		panelAnagrafica.add(panel_5);
		
		JLabel txtpnEt = new JLabel();
		txtpnEt.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		txtpnEt.setOpaque(false);
		txtpnEt.setText("Et\u00E0");
		panel_5.add(txtpnEt);
		
		iEta.setMargin(new Insets(0, 5, 0, 0));
		iEta.addKeyListener(limitaCaratteri);
		iEta.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		iEta.setColumns(4);
		panel_5.add(iEta);
		
		JPanel panel_6 = new JPanel();
		panelAnagrafica.add(panel_6);
		
		JLabel txtpnTitoloDiStudio = new JLabel();
		txtpnTitoloDiStudio.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		txtpnTitoloDiStudio.setOpaque(false);
		txtpnTitoloDiStudio.setText("Titolo di studio");
		panel_6.add(txtpnTitoloDiStudio);
		
		iTitoloStudio = new JTextField();
		iTitoloStudio.addKeyListener(limitaCaratteri);
		iTitoloStudio.setMargin(new Insets(0, 5, 0, 0));
		iTitoloStudio.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		iTitoloStudio.setColumns(32);
		iTitoloStudio.setText(paziente.getTitoloStudio());
		iTitoloStudio.addFocusListener(focusLostSave);
		panel_6.add(iTitoloStudio);
		
		JPanel panel_8 = new JPanel();
		panelAnagrafica.add(panel_8);
		
		JLabel txtpnProfessione = new JLabel();
		txtpnProfessione.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		txtpnProfessione.setOpaque(false);
		txtpnProfessione.setText("Professione");
		panel_8.add(txtpnProfessione);
		
		iProfessione = new JTextField();
		iProfessione.addKeyListener(limitaCaratteri);
		iProfessione.setMargin(new Insets(0, 5, 0, 0));
		iProfessione.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		iProfessione.setColumns(43);
		iProfessione.setText(paziente.getProfessione());
		iProfessione.addFocusListener(focusLostSave);
		panel_8.add(iProfessione);
		
		JPanel panel_11 = new JPanel();
		panelAnagrafica.add(panel_11);
		
		JLabel textPane = new JLabel();
		textPane.setText("Indirizzo");
		textPane.setOpaque(false);
		textPane.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		panel_11.add(textPane);
		
		iIndirizzoVia = new JTextField();
		iIndirizzoVia.addKeyListener(limitaCaratteri);
		iIndirizzoVia.setMargin(new Insets(0, 5, 0, 0));
		iIndirizzoVia.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		iIndirizzoVia.setColumns(33);
		iIndirizzoVia.setText(paziente.getIndirizzoVia());
		iIndirizzoVia.addFocusListener(focusLostSave);
		panel_11.add(iIndirizzoVia);
		
		JPanel panel_12 = new JPanel();
		panelAnagrafica.add(panel_12);
		
		JLabel textPane_2 = new JLabel();
		textPane_2.setText("CAP");
		textPane_2.setOpaque(false);
		textPane_2.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		panel_12.add(textPane_2);
		
		iIndirizzoCAP = new JTextField();
		iIndirizzoCAP.addKeyListener(limitaCaratteri);
		iIndirizzoCAP.setMargin(new Insets(0, 5, 0, 0));
		iIndirizzoCAP.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		iIndirizzoCAP.setColumns(6);
		iIndirizzoCAP.setText(paziente.getIndirizzoCAP());
		iIndirizzoCAP.addFocusListener(focusLostSave);
		panel_12.add(iIndirizzoCAP);
		
		JPanel panel_13 = new JPanel();
		panelAnagrafica.add(panel_13);
		
		JLabel txtpnCitt = new JLabel();
		txtpnCitt.setText("Citt\u00E0");
		txtpnCitt.setOpaque(false);
		txtpnCitt.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		panel_13.add(txtpnCitt);
		
		iCitta = new JTextField();
		iCitta.addKeyListener(limitaCaratteri);
		iCitta.setMargin(new Insets(0, 5, 0, 0));
		iCitta.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		iCitta.setColumns(20);
		iCitta.setText(paziente.getIndirizzoCitta());
		iCitta.addFocusListener(focusLostSave);
		panel_13.add(iCitta);
		
		JPanel panel_14 = new JPanel();
		panelAnagrafica.add(panel_14);
		
		JLabel txtpnProvincia = new JLabel();
		txtpnProvincia.setText("Provincia");
		txtpnProvincia.setOpaque(false);
		txtpnProvincia.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		panel_14.add(txtpnProvincia);
		
		iProvincia = new JTextField();
		iProvincia.addKeyListener(limitaCaratteri);
		iProvincia.setMargin(new Insets(0, 5, 0, 0));
		iProvincia.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		iProvincia.setColumns(4);
		iProvincia.setText(paziente.getIndirizzoProvincia());
		iProvincia.addFocusListener(focusLostSave);
		panel_14.add(iProvincia);
		
		JPanel panel_15 = new JPanel();
		panelAnagrafica.add(panel_15);
		
		JLabel txtpnStato = new JLabel();
		txtpnStato.setText("Stato");
		txtpnStato.setOpaque(false);
		txtpnStato.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		panel_15.add(txtpnStato);
		
		iStato = new JTextField();
		iStato.addKeyListener(limitaCaratteri);
		iStato.setMargin(new Insets(0, 5, 0, 0));
		iStato.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		iStato.setColumns(9);
		iStato.setText(paziente.getIndirizzoStato());
		iStato.addFocusListener(focusLostSave);
		panel_15.add(iStato);
		
		
		

		JPanel panelTelefono = new JPanel();
		JLabel tTelefono = new JLabel();
		tTelefono.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		tTelefono.setOpaque(false);
		tTelefono.setText("Telefono");
		iTelefono = new JTextField();
		iTelefono.addKeyListener(limitaCaratteri);
		iTelefono.setMargin(new Insets(0, 5, 0, 0));
		iTelefono.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		iTelefono.setColumns(20);
		iTelefono.setText(paziente.getNumeroTelefono());
		iTelefono.addFocusListener(focusLostSave);
		panelTelefono.add(tTelefono);
		panelTelefono.add(iTelefono);
		panelAnagrafica.add(panelTelefono);

		JPanel panelEmail = new JPanel();
		JLabel tEmail = new JLabel();
		tEmail.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		tEmail.setOpaque(false);
		tEmail.setText("E-mail");
		iEmail = new JTextField();
		iEmail.addKeyListener(limitaCaratteri);
		iEmail.setMargin(new Insets(0, 5, 0, 0));
		iEmail.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		iEmail.setColumns(24);
		iEmail.setText(paziente.getEmail());
		iEmail.addFocusListener(focusLostSave);
		panelEmail.add(tEmail);
		panelEmail.add(iEmail);
		panelAnagrafica.add(panelEmail);
		
		
		JPanel panel_9 = new JPanel();
		
		JLabel txtpnLuogoEsame = new JLabel();
		txtpnLuogoEsame.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		txtpnLuogoEsame.setOpaque(false);
		txtpnLuogoEsame.setText("Luogo esame");
		panel_9.add(txtpnLuogoEsame);
		
		iLuogoEsame = new JTextField();
		iLuogoEsame.addKeyListener(limitaCaratteri);
		iLuogoEsame.setMargin(new Insets(0, 5, 0, 0));
		iLuogoEsame.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		iLuogoEsame.setColumns(26);
		iLuogoEsame.setText(paziente.getLuogoEsame());
		iLuogoEsame.addFocusListener(focusLostSave);
		panel_9.add(iLuogoEsame);
		
		JPanel panel_10 = new JPanel();
		
		JLabel textPane_1 = new JLabel();
		textPane_1.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		textPane_1.setOpaque(false);
		textPane_1.setText("Data esame");
		iDataEsame = new JTextField();
		iDataEsame.addKeyListener(limitaCaratteri);
		iDataEsame.setMargin(new Insets(0, 5, 0, 0));
		iDataEsame.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		iDataEsame.setColumns(12);
		iDataEsame.addFocusListener(focusLostSave);
		Date data=new Date();
		if (paziente.getDataEsame()!=null){
			iDataEsame.setText(new SimpleDateFormat("dd/MM/yyyy",new Locale("IT")).format(paziente.getDataEsame()));
		}
		panel_10.add(textPane_1);
		panel_10.add(iDataEsame);
		
		
		
		JPanel panelEsaminatore = new JPanel();
		JLabel tEsaminatore = new JLabel();
		tEsaminatore.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		tEsaminatore.setOpaque(false);
		tEsaminatore.setText("Esaminatore");
		iEsaminatore = new JTextField();
		iEsaminatore.addKeyListener(limitaCaratteri);
		iEsaminatore.setMargin(new Insets(0, 5, 0, 0));
		iEsaminatore.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		iEsaminatore.setColumns(40);
		iEsaminatore.setText(paziente.getEsaminatore());
		iEsaminatore.addFocusListener(focusLostSave);
		panelEsaminatore.add(tEsaminatore);
		panelEsaminatore.add(iEsaminatore);

		JPanel panelMetodo = new JPanel();
		JLabel tMetodo = new JLabel();
		tMetodo.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		tMetodo.setOpaque(false);
		tMetodo.setText("Metodo");
		iMetodo = new JTextField();
		iMetodo.addKeyListener(limitaCaratteri);
		iMetodo.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		iMetodo.setColumns(40);
		iMetodo.setText(paziente.getMetodo());
		iMetodo.addFocusListener(focusLostSave);
		panelMetodo.add(tMetodo);
		panelMetodo.add(iMetodo);

		
		JPanel panelRichiedente = new JPanel();
		JLabel tRichiedente = new JLabel();
		tRichiedente.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		tRichiedente.setOpaque(false);
		tRichiedente.setText("Inviante");
		iInviante = new JTextField();
		iInviante.addKeyListener(limitaCaratteri);
		iInviante.setMargin(new Insets(0, 5, 0, 0));
		iInviante.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		iInviante.setColumns(40);
		iInviante.setText(paziente.getInviante());
		iInviante.addFocusListener(focusLostSave);
		panelRichiedente.add(tRichiedente);
		panelRichiedente.add(iInviante);

		JPanel panelContesto = new JPanel();
		JLabel tContesto = new JLabel();
		tContesto.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		tContesto.setOpaque(false);
		tContesto.setText("Contesto di valutazione");
		iContesto = new JTextField();
		iContesto.addKeyListener(limitaCaratteri);
		iContesto.setMargin(new Insets(0, 5, 0, 0));
		iContesto.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		iContesto.setColumns(40);
		iContesto.setText(paziente.getContesto());
		iContesto.addFocusListener(focusLostSave);
		panelContesto.add(tContesto);
		panelContesto.add(iContesto);

		JPanel panelAtteggiamento = new JPanel();
		JLabel tAtteggiamento = new JLabel();
		tAtteggiamento.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		tAtteggiamento.setOpaque(false);
		tAtteggiamento.setText("Atteggiamento durante l'esame");
		iAtteggiamento = new JTextField();
		iAtteggiamento.addKeyListener(limitaCaratteri);
		iAtteggiamento.setMargin(new Insets(0, 5, 0, 0));
		iAtteggiamento.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		iAtteggiamento.setColumns(40);
		iAtteggiamento.setText(paziente.getAtteggiamento());
		iAtteggiamento.addFocusListener(focusLostSave);
		panelAtteggiamento.add(tAtteggiamento);
		panelAtteggiamento.add(iAtteggiamento);

		JPanel panelTempoRaccolta = new JPanel();
		JLabel tTempoRaccolta = new JLabel();
		tTempoRaccolta.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		tTempoRaccolta.setOpaque(false);
		tTempoRaccolta.setText("Tempo di Raccolta");
		iTempoRaccolta = new JTextField();
		iTempoRaccolta.setMargin(new Insets(0, 5, 0, 0));
		iTempoRaccolta.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		iTempoRaccolta.setColumns(4);
		iTempoRaccolta.addKeyListener(limitaCaratteri);
		iTempoRaccolta.setText(paziente.getTempoRaccolta());
		iTempoRaccolta.addFocusListener(focusLostSave);
		panelTempoRaccolta.add(tTempoRaccolta);
		panelTempoRaccolta.add(iTempoRaccolta);

		JPanel panelTempoTotale = new JPanel();
		JLabel tTempoTotale = new JLabel();
		tTempoTotale.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		tTempoTotale.setOpaque(false);
		tTempoTotale.setText("Tempo totale");
		iTempoTotale = new JTextField();
		iTempoTotale.addKeyListener(limitaCaratteri);
		iTempoTotale.setMargin(new Insets(0, 5, 0, 0));
		iTempoTotale.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		iTempoTotale.setColumns(4);
		iTempoTotale.setText(paziente.getTempoTotale());
		iTempoTotale.addFocusListener(focusLostSave);
		panelTempoTotale.add(tTempoTotale);
		panelTempoTotale.add(iTempoTotale);

		JPanel panelAltriTest = new JPanel();
		JLabel tAltriTest = new JLabel();
		tAltriTest.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		tAltriTest.setOpaque(false);
		tAltriTest.setText("Altri Test");
		iAltriTest = new JTextField();
		iAltriTest.addKeyListener(limitaCaratteri);
		iAltriTest.setMargin(new Insets(0, 5, 0, 0));
		iAltriTest.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		iAltriTest.setColumns(40);
		iAltriTest.setText(paziente.getAltriTest());
		iAltriTest.addFocusListener(focusLostSave);
		panelAltriTest.add(tAltriTest);
		panelAltriTest.add(iAltriTest);

		JPanel panelLuce = new JPanel();
		JLabel tLuce = new JLabel();
		tLuce.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		tLuce.setOpaque(false);
		tLuce.setText("Luce");
		iLuce = new JTextField();
		iLuce.addKeyListener(limitaCaratteri);
		iLuce.setMargin(new Insets(0, 5, 0, 0));
		iLuce.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		iLuce.setColumns(40);
		iLuce.setText(paziente.getLuce());
		iLuce.addFocusListener(focusLostSave);
		panelLuce.add(tLuce);
		panelLuce.add(iLuce);

		JPanel panelTavole = new JPanel();
		JLabel tTavole = new JLabel();
		tTavole.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		tTavole.setOpaque(false);
		tTavole.setText("Serie Tavole");
		iTavole = new JTextField();
		iTavole.addKeyListener(limitaCaratteri);
		iTavole.setMargin(new Insets(0, 5, 0, 0));
		iTavole.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		iTavole.setColumns(40);
		iTavole.setText(paziente.getSerieTavole());
		iTavole.addFocusListener(focusLostSave);
		panelTavole.add(tTavole);
		panelTavole.add(iTavole);

		JPanel panelAltriCasi = new JPanel();
		JLabel tAltriCasi = new JLabel();
		tAltriCasi.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		tAltriCasi.setOpaque(false);
		tAltriCasi.setText("Altri Casi correlati");
		iAltriCasi = new JTextField();
		iAltriCasi.addKeyListener(limitaCaratteri);
		iAltriCasi.setMargin(new Insets(0, 5, 0, 0));
		iAltriCasi.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		iAltriCasi.setColumns(40);
		iAltriCasi.setText(paziente.getAltriCasi());
		iAltriCasi.addFocusListener(focusLostSave);
		panelAltriCasi.add(tAltriCasi);
		panelAltriCasi.add(iAltriCasi);
		
		panelCondizioniSomministrazione.add(panel_10);
		panelCondizioniSomministrazione.add(panel_9);
		panelCondizioniSomministrazione.add(panelEsaminatore);
		panelCondizioniSomministrazione.add(panelRichiedente);
		panelCondizioniSomministrazione.add(panelContesto);
		panelCondizioniSomministrazione.add(panelAtteggiamento);
		panelCondizioniSomministrazione.add(panelTempoRaccolta);
		panelCondizioniSomministrazione.add(panelTempoTotale);
		panelCondizioniSomministrazione.add(panelMetodo);
		panelCondizioniSomministrazione.add(panelAltriTest);
		panelCondizioniSomministrazione.add(panelLuce);
		panelCondizioniSomministrazione.add(panelTavole);
		panelCondizioniSomministrazione.add(panelAltriCasi);
		
		
		panelIntegrazioneAnamnesi.setLayout(new BorderLayout());
		iAnamnesi= new JTextArea();
		iAnamnesi.setLineWrap(true);
		iAnamnesi.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		iAnamnesi.setText(paziente.getIntegrazione());
		iAnamnesi.setWrapStyleWord(true);
		JScrollPane sAnamnesi=new JScrollPane(iAnamnesi);
		panelIntegrazioneAnamnesi.add(sAnamnesi,BorderLayout.CENTER);
		iAnamnesi.addFocusListener(focusLostSave);
		
		
		GridBagLayout gbl_panel = new GridBagLayout();
		gbl_panel.columnWidths = new int[]{390, 195,390};
//		gbl_panel.rowHeights = new int[]{0};
		gbl_panel.columnWeights = new double[]{2,1,2};
		gbl_panel.rowWeights = new double[]{1};
		
		panelCategorie.setLayout(gbl_panel);
		
		listBoxAssociate=new JList<Categoria>(new DefaultListModel<Categoria>());
		listBoxDissociate=new JList<Categoria>(new DefaultListModel<Categoria>());
		listBoxAssociate.setFont(new Font("Book Antiqua", Font.PLAIN,15));
		listBoxDissociate.setFont(new Font("Book Antiqua", Font.PLAIN,15));
		PazienteDAO pazienteDAO = new PazienteDAO();
		ArrayList<Categoria> listaCategorieAssociate=(ArrayList<Categoria>) pazienteDAO.getCategorieAssociate(paziente,callerArchivio.getContesto());
		ArrayList<Categoria> listaCategorieDissociate=(ArrayList<Categoria>) pazienteDAO.getCategorieDissociate(paziente);
		for (Categoria categoria : listaCategorieDissociate) {
			DefaultListModel<Categoria> model=(DefaultListModel<Categoria>) listBoxDissociate.getModel();
			model.addElement(categoria);
		}
		for (Categoria categoria : listaCategorieAssociate) {
			DefaultListModel<Categoria> model=(DefaultListModel<Categoria>) listBoxAssociate.getModel();
			model.addElement(categoria);
		}
		listBoxAssociate.addMouseListener(new MouseListener() {
			
			@Override
			public void mouseReleased(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void mousePressed(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void mouseExited(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void mouseEntered(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void mouseClicked(MouseEvent e) {
				if(e.getClickCount()==2){
					rimuoviCategoria();
				}
				
			}
		});
		
		listBoxDissociate.addMouseListener(new MouseListener() {
			
			@Override
			public void mouseReleased(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void mousePressed(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void mouseExited(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void mouseEntered(MouseEvent e) {
				// TODO Auto-generated method stub
				
			}
			
			@Override
			public void mouseClicked(MouseEvent e) {
				if(e.getClickCount()==2){
					aggiungiCategoria();
				}
				
			}
		});
		JPanel panelBoxAssociate=new JPanel(new BorderLayout(10,10));
		panelBoxAssociate.setPreferredSize(new Dimension(200,400));
		JLabel labelBoxAssociate=new JLabel("                           Cartelle associate");
		labelBoxAssociate.setFont(new Font("Book Antiqua", Font.BOLD,15));
		labelBoxAssociate.setAlignmentX(CENTER_ALIGNMENT);
		panelBoxAssociate.add(new JPanel(),BorderLayout.NORTH);
		panelBoxAssociate.add(labelBoxAssociate,BorderLayout.NORTH);
		labelBoxAssociate.setPreferredSize(new Dimension(200,30));
		JScrollPane scrollBoxAssociate = new JScrollPane(listBoxAssociate);
		panelBoxAssociate.add(scrollBoxAssociate,BorderLayout.CENTER);
		
	
		JPanel panelBoxDissociate=new JPanel(new BorderLayout(10,10));
		panelBoxDissociate.setPreferredSize(new Dimension(200,400));
		JLabel labelBoxDissociate=new JLabel("                           Cartelle non associate");
		labelBoxDissociate.setFont(new Font("Book Antiqua", Font.BOLD,15));
		labelBoxDissociate.setAlignmentX(CENTER_ALIGNMENT);
		panelBoxDissociate.add(labelBoxDissociate,BorderLayout.NORTH);
		labelBoxDissociate.setPreferredSize(new Dimension(200,30));
		JScrollPane scrollBoxDissociate = new JScrollPane(listBoxDissociate);
		panelBoxDissociate.add(scrollBoxDissociate,BorderLayout.CENTER);
		
		
		JPanel panelBottoni=new JPanel();
		panelBottoni.setBackground(new Color(255,243,191));
		
		GridBagLayout gbl_panelBottoni = new GridBagLayout();
		gbl_panelBottoni.columnWeights = new double[]{1};
		gbl_panelBottoni.rowWeights = new double[]{1,1,1};
		
		panelBottoni.setLayout(null);
		
		
		
		JButton buttonAggiungi = new JButton("<   Aggiungi");
		buttonAggiungi.setBounds(30,180,130, 35);
		GridBagConstraints gbc_buttonAggiungi = new GridBagConstraints();
		gbc_buttonAggiungi.gridx = 0;
		gbc_buttonAggiungi.gridy = 1;
		buttonAggiungi.setFont(new Font("Book Antiqua", Font.PLAIN, 15));
		buttonAggiungi.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				aggiungiCategoria();
			}
		});
		panelBottoni.add(buttonAggiungi,gbc_buttonAggiungi);
		
		JButton buttonRimuovi = new JButton("Rimuovi   >");
		buttonRimuovi.setBounds(30,235,130, 35);
		GridBagConstraints gbc_buttonRimuovi = new GridBagConstraints();
		gbc_buttonRimuovi.gridx = 0;
		gbc_buttonRimuovi.gridy = 2;
		buttonRimuovi.setFont(new Font("Book Antiqua", Font.PLAIN, 15));
		buttonRimuovi.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				rimuoviCategoria();
			}
		});
		panelBottoni.add(buttonRimuovi,gbc_buttonRimuovi);
		
		GridBagConstraints gbc_panelBoxAssociate = new GridBagConstraints();
		gbc_panelBoxAssociate.fill = GridBagConstraints.BOTH;
		gbc_panelBoxAssociate.gridx = 0;
		gbc_panelBoxAssociate.gridy = 0;
		panelCategorie.add(panelBoxAssociate,gbc_panelBoxAssociate);
		
		GridBagConstraints gbc_panelBottoni = new GridBagConstraints();
		gbc_panelBottoni.fill = GridBagConstraints.BOTH;
		gbc_panelBottoni.gridx = 1;
		gbc_panelBottoni.gridy = 0;
		panelCategorie.add(panelBottoni,gbc_panelBottoni);
		
		GridBagConstraints gbc_panelBoxDissociate = new GridBagConstraints();
		gbc_panelBoxDissociate.fill = GridBagConstraints.BOTH;
		gbc_panelBoxDissociate.gridx = 2;
		gbc_panelBoxDissociate.gridy = 0;
		panelCategorie.add(panelBoxDissociate,gbc_panelBoxDissociate);
		

//***ZONA PULSANTI***
		
		JPanel panelPulsanti=new JPanel();
		

		
		JButton buttonChiudi = new JButton("Chiudi");
		buttonChiudi.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		buttonChiudi.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				salva();
				if (callerArchivio!=null){
					callerArchivio.refresh();
					callerArchivio.setOpen(false);

				}
					
				anamnesiFrame.setVisible(false);
				anamnesiFrame.dispose();
			}
		});
		panelPulsanti.add(buttonChiudi);
		
		JButton buttonSiglatura = new JButton("Siglatura");
		buttonSiglatura.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		buttonSiglatura.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				salva();
				iInserimento.frame.setVisible(true);
			}
		});
		panelPulsanti.add(buttonSiglatura);

		
		JButton buttonProveSupplementari = new JButton("Prove Supplementari");
		buttonProveSupplementari.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		buttonProveSupplementari.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				salva();
				iInserimento.showProveSupplementari();
				//ProveSupplementari p=new ProveSupplementari(iPaziente);
				//p.setVisible(true);
			}
		});
		panelPulsanti.add(buttonProveSupplementari);
		
		JButton buttonPsicogramma = new JButton("Elaborazione / Stampa");
		buttonPsicogramma.setFont(new Font("Book Antiqua", Font.PLAIN, 18));
		buttonPsicogramma.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				FormStampa.Stampa(iInserimento);
				
			}
		});
		panelPulsanti.add(buttonPsicogramma);
		
		
		contentPane.add(panelPulsanti,BorderLayout.SOUTH);
		
		iInserimento=new Inserimento(iPaziente);
		iInserimento.calcoloIndici();


	}
	public void setTitolo(String titolo){
		iTitolo.setText(titolo);
	}

	private void CalcolaEta(){
		Date dataNascita;
		try {
			dataNascita = new SimpleDateFormat("dd/MM/yyy",new Locale("IT")).parse(iDataNascita.getText());
			Date oggi=new Date();
			int anni=(int)((oggi.getTime()-dataNascita.getTime())/1000/3600/24/365);//TODO VERIFICA BISESTILE
			iEta.setText(""+anni);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
//			Main.showError("Errore:"+e.getMessage());
		}
	}
	
	private void aggiungiCategoria(){
		Categoria categoriaDissociata=listBoxDissociate.getSelectedValue();
		if (categoriaDissociata==null) return;
		DefaultListModel<Categoria> modelDissociate=(DefaultListModel<Categoria>) listBoxDissociate.getModel();
		modelDissociate.removeElement(categoriaDissociata);
		DefaultListModel<Categoria> modelAssociate=(DefaultListModel<Categoria>) listBoxAssociate.getModel();
		modelAssociate.addElement(categoriaDissociata);
		categoriaDissociata.addPaziente(iPaziente.getPazienteArchivio());
	}
	
	private void rimuoviCategoria(){
		Categoria categoriaAssociata=listBoxAssociate.getSelectedValue();
		if (categoriaAssociata==null) return;
		DefaultListModel<Categoria> modelAssociate=(DefaultListModel<Categoria>) listBoxAssociate.getModel();
		modelAssociate.removeElement(categoriaAssociata);
		DefaultListModel<Categoria> modelDissociate=(DefaultListModel<Categoria>) listBoxDissociate.getModel();
		modelDissociate.addElement(categoriaAssociata);
		categoriaAssociata.removePaziente(iPaziente.getPazienteArchivio());
	}


	private String formatFloat(double number,int decimali){
		double potenza=Math.pow(10, decimali);
		if (number==0){
			return "";
		}else{
			double numeroArrotondato=((double)Math.round(number*potenza))/potenza;
			if (Math.round(numeroArrotondato)==numeroArrotondato){
				return ""+(int)numeroArrotondato;
			}else{
				return ""+numeroArrotondato;
			}
			
		}
	}
	
	private String formatFloatTrunc(double number){
		return formatFloat(number,0);
	}
	private String formatFloatTrunc(double number,int decimali){
		boolean negativo=number<0;
		if (negativo){
			number=-number;
		}
		double potenza=Math.pow(10, decimali);
		if (number==0){
			return "";
		}else{
			double numeroArrotondato=((double)Math.floor(number*potenza))/potenza;
			if (Math.round(numeroArrotondato)==numeroArrotondato){
				if(negativo){
					return ""+(int)-numeroArrotondato;
				}else{
					return ""+(int)numeroArrotondato;
				}
					
			}else{
				if(negativo){
					return ""+(-numeroArrotondato);
				}else{
					return ""+numeroArrotondato;
				}
			}
			
		}
	}
	private String formatFloat(double number){
		return formatFloat(number,0);
	}


}
